import { getObjectValue } from '../../util/ObjectUtil.js'
/**
*对查看属性有没有v-on
*@param {Hue} vm 创建的Hue实例
*@param {Object} vnode 虚拟dom树的根节点,v-on:keydown="sayhello"
*/
export function checkvon(vm, vnode) {
  if (vnode.nodeType !== 1) return
  const attributeNames = vnode.elm.getAttributeNames()
  for (const attributeName of attributeNames) {
    if (attributeName.indexOf('v-on:') === 0) {
      const event = attributeName.split(':')
      von(vm, vnode, event[1], vnode.elm.getAttribute(attributeName))
    } else if (attributeName.indexOf('@') === 0) {
      const event = attributeName.split('@')
      von(vm, vnode, event[1], vnode.elm.getAttribute(attributeName))
    }
  }
}

/**
*进行事件绑定
*@param {Hue} vm 创建的Hue实例
*@param {Object} vnode 虚拟dom树的根节点
*@param {string} event 事件名
*@param {string} func 函数名
*/
function von(vm, vnode, event, func) {
  if (!vm._methods) {
    return
  }
  let vonfunc = getObjectValue(vm._methods, func)
  if (event.indexOf('.') > -1) {
    const temp = event.split('.')
    vnode.elm.addEventListener(temp[0], (e) => {
      let headChar = temp[1].charAt(0).toUpperCase()
      if (e.key === headChar + temp[1].substring(1, temp[1].length)) {
        callfunc(vm, vonfunc)()
      }
    })
    return
  }
  vnode.elm.addEventListener(event, callfunc(vm, vonfunc))
}

/**
*进行绑定this
*@param {Hue} vm 创建的Hue实例
*@param {Function} vonfunc 绑定的函数
*/
function callfunc(vm, vonfunc) {
  return function () {
    vonfunc.call(vm)
  }
}